package Reseau;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class ReceptionMessage {

	public static void main(String[] args) {
		DatagramSocket sockUDP;
		DatagramPacket message;
		byte[] tampon;
		int portLocal;
		byte[] tamponAccuse = "accuse de reception".getBytes();
		int longueurAccuse = tamponAccuse.length;
		String text;
		try {
			portLocal = Integer.parseInt(args[0]);
			sockUDP = new DatagramSocket(portLocal);
			while (true) {
				// on prepare a recevoir un message
				tampon = new byte[226];
				message = new DatagramPacket(tampon, tampon.length);
				sockUDP.receive(message);
				InetAddress adresseIP = message.getAddress();
				int portDistant = message.getPort();
				text = new String(tampon);
				text = text.substring(0, message.getLength());
				System.out.println("Reception du port :" + portDistant
						+ " adresse de la machine: "
						+ adresseIP.getHostAddress() + " : " + text);
				// On envoie un accuse de reception
				message = new DatagramPacket(tamponAccuse, longueurAccuse,
						adresseIP, portDistant);
				sockUDP.send(message);

			}

		} catch (ArrayIndexOutOfBoundsException exc) {
			System.out
					.println("Avez-vous donne le numero de port sur lequel vous attendez le message ?");
		} catch (SocketException exc) {
			System.out.println("Probleme d'ouverture du socket");
		} catch (IOException exc) {
			System.out
					.println("Probleme sur la reception ou l'envoi du message");
		}
	}

}
